<script>
    (function () {
        function myslice(begin, end) { // ES6中接收多个实参的写法  叫rest参数
            let newArr = [];
            // this 表示arr1
            if (this.length === 0) {
                return newArr;
            } // 如果要截取的数组是一个空的数组  什么也不做返回一个空数组

            // 处理start特殊情况
            begin = begin || 0;
            if (begin < 0) {
                begin = this.length + begin
            } else if (begin >= this.length) {
                return newArr
            }

            // 处理end的特殊情况 1）没有begin 没有end   2）有begin 没有end
            end = end || this.length
            if (end > this.length) {
                end = this.length;
            } else if (end <= begin) {
                return newArr
            }
            for (let i = begin; i < end; i++) { // 遍历下标在[begin end)区间中的所有元素，添加到newArr中
                newArr.push(this[i]); //
            }

            return newArr;
        }
        Array.prototype.myslice = myslice;
    }())

    let arr1 = [1, 3, 4, 5, 7, 9];
    let res1 = arr1.myslice(2, 4); // 2 4 代表都是索引
    console.log(res1); //  [4, 5]

    let res2 = arr1.myslice(-2, -1); // 只有begin，那么表示从begin一直截取到最后
    console.log(res2); // [4,5,7,9]

    let res3 = arr1.myslice();
    console.log(res3) // [1, 3, 4, 5, 7, 9]
</script>